package api;
import java.io.BufferedReader;
import java.io.IOError;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import settings.Settings;
import utils.JSonWriter;
public class ApiClient {
public String executeCommand(String command)
{
if(command.equals("help"))
{
String help = "<method> <url> <data> \n" +
"Type quit to stop.";
return help;
}
try
{
//SPLIT
String[] args = command.split(" ");
//GET METHOD
String method = args[0].toUpperCase();
//GET PATH
String path = args[1];
//GET CONTENT
String content = "";
if(method.equals("POST"))
{
content = command.substring((method + " " + path + " ").length());
}
//CREATE CONNECTION
URL url = new URL("http://127.0.0.1:" + Settings.getInstance().getRpcPort() + "/" + path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//EXECUTE
connection.setRequestMethod(method);
if(method.equals("POST"))
{
connection.setDoOutput(true);
connection.getOutputStream().write(content.getBytes());
connection.getOutputStream().flush();
connection.getOutputStream().close();
}
//READ RESULT
InputStream stream;
if(connection.getResponseCode() == 400)
{
stream = connection.getErrorStream();
}
else
{
stream = connection.getInputStream();
}
InputStreamReader isReader = new InputStreamReader(stream);
BufferedReader br = new BufferedReader(isReader);
String result = br.readLine(); //TODO READ ALL OR HARDCODE HELP
try
{
Writer writer = new JSonWriter();
Object jsonResult = JSONValue.parse(result);
if(jsonResult instanceof JSONArray)
{
((JSONArray) jsonResult).writeJSONString(writer);
return writer.toString();
}
if(jsonResult instanceof JSONObject)
{
((JSONObject) jsonResult).writeJSONString(writer);
return writer.toString();
}
writer.close();
return result;
}
catch(Exception e)
{
return result;
}
}
catch(IOError ioe)
{
//ioe.printStackTrace();
return "Invalid command! \n" +
"Type help to get a list of commands.";
}
catch(Exception e)
{
//e.printStackTrace();
return "Invalid command! \n" +
"Type help to get a list of commands.";
}
}
}